/*
 * @Description:
 * @Version: 1.0
 * @Autor: chen_yt
 * @Date: 2021-01-20 16:52:32
 * @LastEditors: chen_yt
 * @LastEditTime: 2021-12-28 10:04:28
 */
import { appPathPrefix } from '@/config'
const getActiveRule = (hash) => (location) => location.hash.startsWith(hash)

//额外子应用根路径列表
//针对一些比较特殊的子应用，不是以router渲染，而是在某个页面手动挂载，需要在此处填入挂载页面相关path
//例：在首页（/path）手动挂载了一个子应用，此处设置为
//extraSubRoute=['/home']
const extraSubRoute = []

let appInfos = [
  //对象共有3个属性，如下：
  //name:必填，子应用名称
  //entry:非必填，子应用自己的运行地址，可填写绝对地址或使用代理，不填时默认为/subPrefix+ _ + name/
  //activeRoute:非必填，主应用激活子应用的路由激活地址，以/开头，不填时默认为/subPrefix+ _ + name
  //basePath:高级选项，子应用路由前缀。非特殊要求微前端开发不需要填写

  {
    name: 'bpm',
    entry: './sub_app_bpm/'
    // entry: 'http://10.215.142.66:8025/'
  },
  {
    name: 'wp',
    entry: './sub_app_wp/'
    // entry: 'http://10.215.142.66:8014/'
  }
]

// axios.get('../static/project.config.json').then(res=>{
//     applist = res.data
//     if(appInfos.length>0) {
//         appInfos = [...new Set([...appInfos, ...applist])]
//         let resultArr = [];//去重后的数组
//         var flag;
//         for (var i in appInfos){
//             flag = true;
//             for (var j in resultArr) {
//                 if (resultArr[j].name ==appInfos[i].name) {
//                     flag = false;
//                     break;
//                 }
//             }
//             if (flag) {
//                 resultArr.push(appInfos[i]);
//             }
//         }
//         appInfos = resultArr

//     }

//从根节点的dataset导入子应用名称
//这种方法适用于使用Docker env来配置子应用，只能填入子应用的name
//Dockerfile命令如下
//RUN sed -i -r "s/<html/<html data-sub-app=$VUE_APP_SUB_APP_LIST/g" /usr/share/nginx/html/index.html
//CMD ["/bin/bash", "-c", "sed -i -r \"s/<html/<html data-sub-app=$VUE_APP_SUB_APP_LIST/g\" /usr/share/nginx/html/index.html && nginx -g 'daemon off;'"]

//在Docker运行时可配置环境变量 VUE_APP_SUB_APP_LIST = DEMO;TABLE;
//这样就添加了name为DEMO和TABLE的两个子应用
const getAppList = () => {
  const { subApp } = document.querySelector('html').dataset
  if (subApp && subApp.length > 0) {
    return `${subApp}`.split(';')
  }
  return process.env.VUE_APP_SUB_APP_LIST.split(';')
}

//对从Docker中传入的子应用名称和已有的子应用进行去重处理，以先存在的为准
let subAppList = getAppList()
for (let i = 0; i < subAppList.length; i++) {
  let exist = false
  for (let j = 0; j < appInfos.length; j++) {
    if (appInfos[j].name == subAppList[i]) {
      exist = true
      break
    }
  }
  if (exist) continue
  if (subAppList[i].length <= 0) continue
  appInfos.push({ name: subAppList[i] })
}

export function formatAppInfo(appInfos) {
  //补充并格式化appInfos中各项属性值
  for (let i = 0; i < appInfos.length; i++) {
    //name：'FAWKES'->'FAWKES'
    appInfos[i].name = appInfos[i].name

    //entry：''->'/sub_app_FAWKES/'
    appInfos[i].entry = appInfos[i].entry
      ? appInfos[i].entry
      : '/' + appPathPrefix + appInfos[i].name + '/'

    //activeRoute：''->'/sub_app_FAWKES'
    appInfos[i].activeRoute = appInfos[i].activeRoute
      ? appInfos[i].activeRoute
      : '/' + appPathPrefix + appInfos[i].name

    //activeRule：getActiveRule('#/sub_app_FAWKES')
    appInfos[i].activeRule = getActiveRule('#' + appInfos[i].activeRoute)
  }
}

formatAppInfo(appInfos)
//子应用触发路径列表
const subAppRoute = extraSubRoute

if (appInfos.length > 0) {
  appInfos.forEach((item) => {
    subAppRoute.push(item.activeRoute)
  })
}

export { appInfos, subAppRoute }
